import { Base } from "@/js/api/base";
import { Enum } from "@/js/enum"
import axios from "axios";
export class Foundation extends Base {
  DIC_LIST_KEY = "dic_list" // 缓存key
  dic_list = {} // 已读取缓存列表
  // constructor(port) {
  //   super(port);
  //   this.$axios = axios.create({
  //     baseURL: 'http://127.0.0.1:30010' + this.port,
  //     timeout: 30000,// 超时 毫秒
  //   })
  // }
  /**
   * 枚举列表
   * @param params
   * @param callBack
   */
  dicListExtend(params, callBack) {
    return this.get("/foundation/dic/list_extend", params, callBack)
  }
  /**
   * 枚举列表 缓存型
   * ~~~
   * 从缓存中取dic枚举，不存在部分请求后缓存，并返回。
   * ~~~
   * @param types 类型列表,示例： [1001,1002]
   * @param params 附加参数
   * @returns json dic列表
   */
  async dicListExtendCache(types, params, callBack) {
    let list = JSON.parse(localStorage.getItem(this.DIC_LIST_KEY)) ?? {}
    let reply = {}
    let queryInfo = []
    // 从存储查看要请求的枚举是否存在 存在从存储取出 
    types.forEach((element, index) => {
      if (element >= 1000 && list[element]) {
        reply[element] = list[element]
      } else {
        queryInfo.push(element)
      }
    })

    // 不存在存储的枚举继续查询
    if (queryInfo.length > 0) {
      
      // 这里的请求必须等待结果
      await new Promise((resolve, reject) => {
        // 查询不存在缓存的部分调取一次请求，并缓存；如果都存在缓存中就无需再次发起请求。
        this.dicListExtend({ types: queryInfo.join(','),operator_key: params.operator_key??0, app: params.app??0  }, res => {
          if (res.status) {
            queryInfo.forEach(element => {
              reply[element] = res.data.type[element].list
              list[element] = reply[element]
            })
            window.localStorage.setItem(this.DIC_LIST_KEY, JSON.stringify(list))
          } else {
            alert('枚举错误:' + res.message)
          }
          resolve()
        })
      })
    }
    callBack(reply)




    // let temp_types = types
    // let listStr = window.localStorage.getItem(this.DIC_LIST_KEY) || "{}"
    // let list = JSON.parse(listStr)
    // let resp = {}
    // if (list) {
    //     let temp_type2 = []
    //     for (let t in temp_types) {
    //         let val = list[temp_types[t]]
    //         if (val) {
    //             resp[temp_types[t]] = val
    //         } else {
    //             temp_type2.push(temp_types[t])
    //         }
    //     }
    //     temp_types = temp_type2
    // }

    // if (temp_types.length > 0) {
    //     // 这里的请求必须等待结果
    //     await new Promise((resolve, reject) => {
    //         // 查询不存在缓存的部分调取一次请求，并缓存；如果都存在缓存中就无需再次发起请求。
    //         this.dicListExtend({ types: temp_types.join(',') }, res => {
    //             if (res.status) {
    //                 for (let i in res.data.type) {
    //                     resp[i] = res.data.type[i].list
    //                     list[i] = rejectres.data.type[i].list
    //                 }
    //                 // 合并信息后，重新缓存
    //                 window.localStorage.setItem(this.DIC_LIST_KEY, JSON.stringify(list))
    //             } else {
    //                 console.log("dic 枚举请求错误：" + res.message)
    //             }
    //             resolve()
    //         })
    //     })
    // }

    // // 缓存到对象
    // for (let item in resp) {
    //     this.dic_list[item] = resp[item]
    // }
    // callBack(resp)
  }

  /**
   * 获取dic枚举名称
   * @param type 枚举类型， 对应type需要先调用 dicListExtendCache 方法，以预先加载
   * @param id 枚举编号
   * @param string out_type 输出类型：txt.文本、html.包含html修饰的文本
   * @returns {string} 枚举值
   */
  dicGetName(type, id, out_type = 'txt') {
    let val = ""
    for (let item in this.dic_list[type]) {
      if (this.dic_list[type][item].id == id) {
        val = this.dic_list[type][item].name
        break
      }
    }
    if (out_type == 'html') {
      switch (type) {
        case Enum.DicTypeStatus:
          let temp = ''
          if (id == $api.Enum.StatusActive) {
            temp = 'el-tag--success'
          } else if (id == $api.Enum.StatusDisable) {
            temp = 'el-tag--danger'
          }
          val = "<span class=\"el-tag " + temp + " el-tag--small el-tag--light\">" + val + "</span>";
      }
    }
    return val
  }

  dicGetStatus(id) { }
}